<?php

class MyActiveDataProvider extends CActiveDataProvider
{
	private $_filter;
	
	//вызываеться при создании класса с конструктора CActiveDataProvider
	public function setFilter($value)
	{
		if(is_array($value))
		{
			$filter=$this->getFilter();
			$filter->addFilters($value);
		}
		else
			$this->_filter=$value;
	}
	
	//вызываеться с setFilter и с fetchData для создания нового класса MyDataFilter или получения фильтра
	public function getFilter()
	{
		if($this->_filter===null)
		{
			$this->_filter=new MyDataFilter;
			//$this->_filter->sortVar=$this->getId().'_sort';		//init new sort
		}
		return $this->_filter;
	}
	
	//вызываеться когда виджет получает данные от DataProvider
	protected function fetchData()
	{
		$criteria=clone $this->getCriteria();
		if(($filter=$this->getFilter())!==false)
		{
			$filter->applyCriteria($criteria);
		}
		if(($pagination=$this->getPagination())!==false)
		{
			$pagination->setItemCount($this->getTotalItemCount(true));
			$pagination->applyLimit($criteria);
		}
		if(($sort=$this->getSort())!==false)
			$sort->applyOrder($criteria);

		return CActiveRecord::model($this->modelClass)->findAll($criteria);
	}
}